package keyintegrity.orm.jpa;

/**
 * Интерфейс, ответственный за сохранение объектов класса <code>T</code>.
 * 
 * Этот интерфейс применяется если при сохранении экземпляра класса 
 * нужно совершить набор действий в этой же транзакции.
 * 
 * @author dmitrygusev
 *
 * @param <T>
 */
public interface Persister<T> {

	/**
	 * Метод отвечает за сохранение объекта 
	 * @param storage
	 * @param instance
	 * @return
	 * @throws StorageException 
	 */
	public T persist(final Storage storage, final T instance) throws StorageException;

	/**
	 * Метод проверяет, может ли данный объект {@link Persister} 
	 * сохранить объект <code>instance</code>.
	 * 
	 * @param instance
	 * @return
	 */
	public boolean compatibleWith(Object instance);
	
}
